﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Control;

    public partial class Administracion : System.Web.UI.Page
    {



        #region Atributos

        IControl control;

        #endregion

        #region Propiedades

        /// <summary>
        /// Propiedad para el manejo del control
        /// </summary>
        private ControlUsuarioSist controlUsuarioSist
        {
            get
            {
                if (Session["ControlUsuarioSist"] == null) return null;
                else return ((ControlUsuarioSist)Session["ControlUsuarioSist"]);
            }
        }
        /// <summary>
        /// Propiedad para el manejo del state
        /// </summary>
        private StateUsuarioSist stateUsuarioSist
        {
            get
            {
                if (Session["ControlUsuarioSist"] == null) return null;
                else return (StateUsuarioSist)((ControlUsuarioSist)Session["ControlUsuarioSist"]).State;
            }
        }
        #endregion



        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                IniciaContol();
                EnlazarControlesInicio();
                InsertarMensualidades();
            }
            control = (ControlUsuarioSist)Session["ControlUsuarioSist"];
        }

        private void InsertarMensualidades()
        {
            //controlUsuarioSist.InsertarMensualidades(DateTime.Now);
        }

        private void EnlasarGrid()
        {
            GrdRegistros.DataSource = stateUsuarioSist.UsuarioSists;
            GrdRegistros.DataBind();
        }
        /// <summary>
        /// Metodo Que Inicia El control y el estado de la pagina
        /// </summary>
        private void IniciaContol()
        {
            ControlUsuarioSist controInicial = new ControlUsuarioSist();
            StateUsuarioSist StateInicial = new StateUsuarioSist();
            control = controInicial;
            control.State = StateInicial;
            Session["ControlUsuarioSist"] = control;
        }


        /// <summary>
        /// Método que se ejecuta antes de que la página se descargue
        /// </summary>
        protected void Page_PreRender()
        {
            Session["ControlUsuarioSist"] = control;
        }
        protected void BtnNuevo_Click(object sender, EventArgs e)
        {
            controlUsuarioSist.SeleccionaNuevo();
            stateUsuarioSist.OpcSeleccionada = "Nuevo";
            MostrarVista();
        }

        protected void MostrarVista()
        {

            switch (stateUsuarioSist.OpcSeleccionada)
            {
                case "Editar":
                    DvRegiostro.ChangeMode(DetailsViewMode.Edit);
                    EnlazarDetailsView();
                    InicializarControles();
                    break;

                case "Nuevo":
                    DvRegiostro.ChangeMode(DetailsViewMode.Insert);
                    DvRegiostro.DataSource = null;
                    DvRegiostro.DataBind();
                    InicializarControles();
                    break;


                case "Actualizar":

                
                    PnlGrid.Visible = true;
                    pnlDetailsView.Visible = false;
                    EnlazarControlesInicio();

                    break;
            }
        }






        private void EnlazarControlesInicio()
        {


            controlUsuarioSist.ObtenerTodosUsuarioSists();
            controlUsuarioSist.ObtenerTodosCategorias();
         
            EnlasarGrid();

            BtnNuevo.Visible = true;
            BtnEliminar.Visible = false;
            BtnRegresar.Visible = false;
            BtnGuardar.Visible = false;

         
            PnlGrid.Visible = true;
            pnlDetailsView.Visible = false;
            GrdRegistros.SelectedIndex = -1;

        }

      

        /// Inicializa los controles para la acción Nuevo y Editar
        /// </summary>
        private void InicializarControles()
        {

          
            PnlGrid.Visible = false;
            pnlDetailsView.Visible = true;
            BtnGuardar.Visible = true;
            BtnRegresar.Visible = true;

            if (stateUsuarioSist.OpcSeleccionada == "Editar")
            {
                BtnEliminar.Visible = true;
                BtnNuevo.Visible = true;

             DropDownList  DdlRoll =  GetDropDownList("DdlRoll");
             DdlRoll.SelectedValue = stateUsuarioSist.UsuarioSist.Roll;
            }
            if (stateUsuarioSist.OpcSeleccionada == "Nuevo")
            {
                BtnEliminar.Visible = false;
                BtnNuevo.Visible = false;
            }

        }

        private void EnlazarDetailsView()
        {
            ArrayList nuevoReg = new ArrayList();
            nuevoReg.Add(stateUsuarioSist.UsuarioSist);
            DvRegiostro.DataSource = nuevoReg;
            DvRegiostro.DataBind();
        }
        protected void BtnRegresar_Click(object sender, EventArgs e)
        {

            if (stateUsuarioSist.VerPago)
            {
             
                controlUsuarioSist.CampoSeleccionado(GrdRegistros.SelectedRow.DataItemIndex);
                stateUsuarioSist.OpcSeleccionada = "Editar";
                MostrarVista();

            }
            else
            {
               
                controlUsuarioSist.ObtenerTodosUsuarioSists();
                stateUsuarioSist.OpcSeleccionada = "Actualizar";
                MostrarVista();
            }
        }
        protected void BtnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                AsignarDatosServicio();
                switch (stateUsuarioSist.OpcSeleccionada)
                {
                    case "Nuevo":
                        controlUsuarioSist.SeleccionaGuardar();
                        Alert("El Registro se agregó satisfactoriamente");
                        stateUsuarioSist.OpcSeleccionada = "Editar";
                        MostrarVista();
                        break;
                    case "Editar":
                        controlUsuarioSist.SeleccionaModificar();
                        Alert("El Registro se modificó satisfactoriamente");
                        break;
                }
            }
            catch (Exception ex)
            {
                Alert(ex.Message);
            }
        }

        private void Alert(string msj)
        {
            String script = "alert('" + msj + "');";
           // ScriptManager.RegisterStartupScript(this, this.GetType(), "Identifier", script, true);

        }

        private void AsignarDatosServicio()
        {
            if (GrdRegistros.SelectedDataKey != null) stateUsuarioSist.UsuarioSist.IdUsuarioSist = int.Parse(GrdRegistros.SelectedDataKey.Value.ToString());

            stateUsuarioSist.UsuarioSist.Nombre = ((TextBox)GetTextBox("TxtNombre")).Text;
            stateUsuarioSist.UsuarioSist.Password = ((TextBox)GetTextBox("TxtPassword")).Text;
            stateUsuarioSist.UsuarioSist.Roll = ((DropDownList)GetDropDownList("DdlRoll")).SelectedValue;
                      
        }

        private TextBox GetTextBox(string Control)
        {
            TextBox ctrlT = (TextBox)DvRegiostro.FindControl(Control);
            if (ctrlT == null)
                throw new Exception("GetTextBox: No existe el control " + Control);
            return ctrlT;
        }

        private DropDownList GetDropDownList(string Control)
        {
            DropDownList ctrlD = (DropDownList)DvRegiostro.FindControl(Control);
            if (ctrlD == null)
                throw new Exception("GetDropDownLis: No existe el control " + Control);
            return ctrlD;
        }
        protected void GrdRegistros_SelectedIndexChanged(object sender, EventArgs e)
        {
            controlUsuarioSist.CampoSeleccionado(GrdRegistros.SelectedRow.DataItemIndex);
            stateUsuarioSist.OpcSeleccionada = "Editar";
            MostrarVista();
        }
        protected void BtnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                controlUsuarioSist.SeleccionaEliminar();
                Alert("El Cliente se eliminó satisfactoriamente");
                stateUsuarioSist.OpcSeleccionada = "Actualizar";
                MostrarVista();
            }
            catch (Exception ex)
            {
                Alert(ex.Message);
            }

        }



        protected void GrdRegistros_PreRender(object sender, EventArgs e)
        {

            GrdRegistros.UseAccessibleHeader = true;

            if (GrdRegistros.Rows.Count != 0)
            {

                GrdRegistros.HeaderRow.TableSection = TableRowSection.TableHeader;

            }

        }


        protected void GrdRegistros_DataBound(object sender, EventArgs e)
        {

            if (sender != null)
            {

                GridView _grid = (GridView)sender;

                if (_grid.Rows.Count > 0)
                {

                    _grid.UseAccessibleHeader = true;

                    _grid.HeaderRow.TableSection = TableRowSection.TableHeader;

                }

            }

        }


        protected void BtnVerPagos_Click(object sender, EventArgs e)
        {
            stateUsuarioSist.VerPago = true;
            pnlDetailsView.Visible = false;
            PnlGrid.Visible = false;
            BtnEliminar.Visible = false;
            BtnGuardar.Visible = false;
            BtnNuevo.Visible = false;
            BtnRegresar.Visible = true;

            controlUsuarioSist.ObtenerPagosPorUsuarioSist(stateUsuarioSist.UsuarioSist.IdUsuarioSist);
        

        }

        protected void BtnModificarMontos_Click(object sender, EventArgs e)
        {
            try
            {

            controlUsuarioSist.ModificarMontos(int.Parse(TxtMensualidad.Text),int.Parse(TxtRecargo.Text));
            Alert("Los Montos se han Modificados");

            }
            catch (Exception ex)
            {

                Alert(ex.Message);
          
            }



        }

       

              
                

  

       



    }



